/*
 * AqueousActivityModel.h
 *
 *  Created on: 23 May 2011
 *      Author: allan
 */

#ifndef AQUEOUSACTIVITY_H_
#define AQUEOUSACTIVITY_H_

// C++ includes
#include <functional>
using namespace std::placeholders;

// GeoReact includes
#include "Utils.h"

// GeoReact forward declarations
class AqueousPhase;

typedef std::function<const vector<double> (const AqueousPhase& sol, double T, double P, const vector<double>& n)> 
IonicActivityFunction;
	
typedef std::function<const double (const AqueousPhase& sol, double T, double P, const vector<double>& n)> 
NeutralActivityFunction;

// Helgeson, H. C., Kirkham, D. H., & Flowers, G. C. (1981). Theoretical prediction of the thermodynamic behavior of aqueous electrolytes by high pressures and temperatures: IV. Calculation of activity coefficients, osmotic coefficients, and apparent molal and standard and relative partial molal properties to 600 C. American Journal of Science, 281(10), 1249-1516. doi:10.2475/ajs.281.10.1249
const IonicActivityFunction
HkfIonicActivityModel(const vector<string>& ionsNames);

const NeutralActivityFunction
SetschenowActivityModel();

const NeutralActivityFunction
SetschenowActivityModel(double b);

const NeutralActivityFunction
SetschenowActivityModel(const vector<double>& bi, const vector<double>& Ti);

const NeutralActivityFunction
HkfWaterActivityModel(const vector<string>& ionsNames);

const NeutralActivityFunction
DrummondCO2ActivityModel();

#endif /* AQUEOUSACTIVITY_H_ */
